
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体为黑体
plt.rcParams['axes.unicode_minus'] = False   # 解决保存图像时负号'-'显示为方块的问题

# 禁止未来预期报错!!!
pd.set_option('future.no_silent_downcasting', True)
# 读取数据清洗后的Excel表格!!!
df = pd.read_excel("house.xlsx")
print(df.describe())

# 探究单价、数量、总价和行政区域之间的关系
fig2,ax = plt.subplots(3,1,figsize=(8,18))           # 创建三个竖直方向上的子图
x = df['地区'].unique()                                           # x轴统一为 "地区"

###各区单价对比
# 从大到小降序排列
y1 = round(df.groupby(by=['地区'])['单价'].mean().sort_values(ascending=False),2)           #y轴为各区平均单价
sns.barplot(x=x,y=y1,ax=ax[0],palette='Blues_r')                                          #颜色为从深蓝色到浅蓝色的渐变
ax[0].set_title('北京市各个区二手房平均单价对比')
ax[0].set_ylabel('单价 (元/平米)')
ax[0].set_xlabel('地区')

###各区总价对比
y2 = round(df.groupby(by=['地区'])['总价'].mean().sort_values(ascending=False),2)          #y轴为各区平均总价
sns.barplot(x=x,y=y2,ax=ax[1],palette='BuGn_r')                                          #颜色为绿色渐变
ax[1].set_title('北京市各个区二手房平均总价对比')
ax[1].set_ylabel('总价 (万元)')
ax[1].set_xlabel('地区')

###各区房子数量对比
y3 = round(df.groupby(by=['地区']).size().sort_values(ascending=False),2)                 #y轴为各区平均数量
sns.barplot(x=x,y=y3,ax=ax[2],palette='Oranges_r')                                       #颜色为从深黄色到浅黄色的渐变
ax[2].set_title('北京市各个区二手房数量对比')
ax[2].set_ylabel('数量')
ax[2].set_xlabel('地区')
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究单价、数量、总价和行政区域之间的关系.png')
plt.show()

# 探究建筑面积和总价的关系
plt.figure(figsize=(8,7))
sns.scatterplot(x='建筑面积',y='总价',data=df,s=14,color=["#008B8B"])
plt.xlabel("建筑面积 (平方米)")
plt.ylabel("总价 (万元)")
plt.title("建筑面积和总价的关系图")
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究建筑面积和总价的关系.png')
plt.show()

# 探究朝向和总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["朝向"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='朝向',y='总价',data=df,width=0.5,notch=True,order=my_order,color='#8B0000')
plt.ylabel("总价 (万元)")
plt.title("朝向和总价的关系图")
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究朝向和总价的关系.png')
plt.show()

# 探究装修程度和总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["装修程度"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='装修程度',y='总价',data=df,width=0.4,notch=True,order=my_order,color='#006400')
plt.ylabel("总价 (万元)")
plt.title("装修程度和总价的关系图")
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究装修程度和总价的关系.png')
plt.show()

# 探究楼层和总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["楼层"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='楼层',y='总价',data=df,width=0.3,notch=True,order=my_order,color='#0000CD')
plt.ylabel("总价 (万元)")
plt.title("楼层和总价的关系图")
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究楼层和总价的关系.png')
plt.show()

# 探究电梯和总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["有无电梯"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='有无电梯',y='总价',data=df,width=0.2,notch=True,order=my_order,palette=["#FF0000",'#0000FF'])
plt.ylabel("总价 (万元)")
plt.title("电梯和总价的关系图")
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究电梯和总价的关系.png')
plt.show()

# 建筑年代与数量分析
plt.figure(figsize=(16,8))
order = sorted(df['建筑年代'].value_counts().index)
sns.countplot(x=df['建筑年代'],order=order,palette='Reds')
plt.ylabel("数量")
plt.title("建筑年代与数量分析图")
plt.xticks(rotation=45)
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究建筑年代与数量的关系.png')
plt.show()

# 首先，按照'建筑年代'升序排序df
df = df.sort_values(by="建筑年代", ascending=False)
# 如果我们只想展示前20个不同的建筑年代
# 我们可以这样做来确保my_order是按建筑年代排序的
unique_years = df['建筑年代'].unique()
my_order = unique_years[20:0:-1]
# 使用seaborn绘制箱线图
sns.boxplot(x='建筑年代', y='总价', data=df, width=0.2, notch=True, order=my_order, color='red')
# 设置图表的其他属性
plt.ylabel("总价 (万元)")
plt.title("建筑年代和总价的关系图")
plt.xticks(rotation=45)  # 旋转x轴标签以便更好地显示
plt.savefig(r'D:\PYCHARM文件\zwz050418\main\探究建筑年代和总价的关系.png')
plt.show()

# 产权性质与总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["产权性质"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='产权性质',y='总价',data=df,width=0.2,order=my_order,palette=["#FF0000",'#FF7F24','#FFFF00',"#00FF00","#00FFFF",'#0000FF',"#A020F0","#363636"])
plt.ylabel("总价 (万元)")
plt.title("产权性质和总价的关系图")
plt.xticks(rotation=0)
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究产权性质和总价的关系.png')
plt.show()

# 住宅类别与总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["住宅类别"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='住宅类别',y='总价',data=df,width=0.2,order=my_order,palette=['#1E90FF','#FF00FF',"#FFFF00","#FF3030","#FF00FF"])
plt.ylabel("总价 (万元)")
plt.title("住宅类别和总价的关系图")
plt.xticks(rotation=0)
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究住宅类别和总价的关系.png')
plt.show()

# 建筑结构与总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["建筑结构"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='建筑结构',y='总价',data=df,width=0.2,order=my_order,palette=["#FFFF00",'#1E90FF','#FF00FF',"#FF3030","#00008B","#FF00FF"])
plt.ylabel("总价 (万元)")
plt.title("建筑结构和总价的关系图")
plt.xticks(rotation=0)
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究建筑结构和总价的关系.png')
plt.show()

# 建筑形式与总价的关系
plt.figure(figsize=(10,8))
my_order = df.groupby(by=["建筑形式"])["总价"].median().sort_values(ascending=False).index
sns.boxplot(x='建筑形式',y='总价',data=df,width=0.2,order=my_order,palette=['#FF0000',"#FFFF00",'#0000FF'])
plt.ylabel("总价 (万元)")
plt.title("建筑形式和总价的关系图")
plt.xticks(rotation=0)
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究建筑形式和总价的关系.png')
plt.show()

# 户型和总价的关系
plt.figure(figsize=(15,15))
my_order = df.groupby(by=["户型"])["总价"].median().sort_values().index
sns.boxplot(y='户型',x='总价',data=df,width=0.2,order=my_order,color="#FF0000")
plt.xlabel("总价 (万元)")
plt.ylabel("户型")
plt.title("户型和总价的关系图")
plt.xticks(rotation=0)
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究户型和总价的关系.png')
plt.show()

# 户型和数量的关系
plt.figure(figsize=(15,15))
order = df['户型'].value_counts(ascending=False).index
sns.countplot(y=df['户型'],order=order,color="#CD2626")
plt.xlabel("数量")
plt.ylabel("户型")
plt.savefig(R'D:\PYCHARM文件\zwz050418\main\探究户型和数量的关系.png')
plt.show()